import { EffectBuff } from "../../skill/model/report/EffectBuff";
import { EffectDamage } from "../../skill/model/report/EffectDamage";
import { EffectImmune } from "../../skill/model/report/EffectImmune";
import { EffectShield } from "../../skill/model/report/EffectShield";
import { EffectRecovery } from "./EffectRecovery";

/** 技能触发事件 */
export enum BattleTriggerEvent {
    /** 学习技能 */
    Learn = "onLearn",
    /** 主动释放技能 */
    Casting = "onCasting",
    /** 技能效果计算前 */
    CastBefore = "onCastBefore",
    /** 技能效果计算后 */
    CastAfter = "onCastAfter",
    /** 目标受击效果赋值前 */
    HitBefore = "onHitBefore",
    /** 目标受击效果赋值后 */
    HitAfter = "onHitAfter",
    /** 角色进入战场、复活时触发 */
    Revive = "onRevive",
    /** 角色自己死亡时触发 */
    SelfDie = "onSelfDie",
    /** 队友死亡时触发 */
    OtherDie = "onOtherDie",
    /** 敌方死亡时触发 */
    EnemyDie = "onEnemyDie",
    /** 回合开始 */
    RoundStart = "onRoundStart",
    /** 回合结束 */
    RoundEnd = "onRoundEnd",
    /** 战斗开始 */
    BattleStart = "onBattleStart",
    /** 战斗结束 */
    BattleEnd = "onBattleEnd",
    /** 行动前 */
    ActionBefore = "onActionBefore",
    /** 行动后 */
    ActionAfter = "onActionAfter",
    /** 友军释放技能时 */
    FriendSkillCasting = "onFriendSkillCasting",
    /** 敌方BUFF添加完成时触发 */
    EnemyBuffAdded = "onEnemyBuffAdded",
    /** 敌方BUFF覆盖或叠加时触发 */
    EnemyBuffCover = "onEnemyBuffCover",
    /** 友军护盾消失时 */
    FriendShieldOver = "onFriendShieldOver",
    /** 格挡时 */
    Block = "onBlock",
}

/** 受击战报类型 */
export type Effect = EffectDamage | EffectRecovery | EffectBuff | EffectImmune | EffectShield;

/** 伤害变化类型 */
export enum BattleDamageType {
    /** 标准 */
    Normal,
    /** 暴击 */
    Critical,
    /** 格挡 */
    Block,
    /** 免伤 */
    Immune,
    /** 流血 */
    Blood,
    /** 中毒 */
    Poison,
    /** 灼烧 */
    Fire,
    /** 格挡反击 */
    Retaliation
}

/** 角色状态类型 */
export enum BattleRoleState {
    /** 存活 */
    Alive,
    /** 死亡 */
    Die,
    /** 复活 */
    Revive
}

/** 技能战报类型 */
export enum BattleSkillType {
    /** 角色技能 */
    Role,
    /** 装备技能 */
    Equip
}

/** 战斗结果 */
export enum BattleResultType {
    /** 胜利 */
    Win,
    /** 失败 */
    Lose,
    /** 战斗进行中*/
    Battling,
}